g
};
- let replacements = {
- let mut replacements = HashMap::new();
- for &(ref id, ref pkg) in live_pkgs.values() {
- if let Some(ref replace) = pkg.replace {
- assert!(pkg.dependencies.is_none());
- if let Some(replace_id) = try!(lookup_id(replace)) {
- replacements.insert(id.clone(), replace_id);
- }
+ let replacements: HashMap<_, _> = try!(live_pkgs.values()
+ .filter_map(|&(ref id, pkg)| pkg.replace.as_ref().and_then(|replace| {
+ assert!(pkg.dependencies.is_none());
+ match lookup_id(replace) {
+ Err(e) => Some(Err(e)),
+ Ok(None) => None,
+ Ok(Some(replace)) => Some(Ok((id.clone(), replace)))
}
- }
- replacements
- };
+ })).collect());
let mut metadata = self.metadata.unwrap_or(BTreeMap::new());